<!-- 
  1. axios响应式拦截器优化
     1. 简化了res.data.data   (res.data 是axios插件自定义的)
        
        (response)=>{
            return response 
            -> return response.data
        }

     2. 在后端接口不是以标准的http状态码来标记接口是否成功 是以一个自定义的字段
        data: { success: true/ false}
         
        (response)=>{
          const success = response.data.success
          if(success){
            return response.data
          }else{
            return Promise.reject(new Error(message))
          }
        }

  2. 使用vuex管理token
        1. 使用vuex管理数据的一般模式
           1. 定义响应式数据 state  ->  定义修改数据的唯一方法 mutation函数  -> 定义支持异步请求的action函数

           2. 业务组件只需要把action函数调用起来  dispatch('user/setToken')

           3. dev-tools vuex调试  mutation - state  在什么时间下通过调用哪个mutation函数传递什么参数把state修改成了什么样子

        2. vuex集中状态管理工具
           只放置和数据操作相关的代码  不放置业务代码

  
  3. action函数异步封装
        场景：action函数中有异步接口调用 而这个接口成功之后还有后续逻辑处理 如何保证后续逻辑代码执行一定是在接口成功返回之后执行？

        actions：{
          asyncSetToken(){
            return new Promise((resolve,reject)=>{
              login().then(res=>{
                // 状态修改为已解决
                resolve()
              })
            })
            
          }
        }

        dispatch('asyncSetToken').then(()=>{
           this.$router.push('/')
        })
       


  4. 持久化缓存token
        场景：vuex管理token基于内存管理  刷新就丢失  想使用vuex管理数据又不想刷新丢失
        技术方案：
           1. 获取token
           2. 一式俩份  vuex + localstorage / cookie
           3. vuex中初始化 token的位置  优先从本地取 取到就用本地  取不到采用初始值

        vuex vs ls
          vuex基于内存  快  刷新丢失
          ls基于磁盘    慢  持久化
-->